#ifndef CTRL_H
#define CTRL_H

#include <QWidget>
#include <QThread>
#include <QDebug>
#include <QTcpSocket>
#include <QMutexLocker>
#include <QMutex>

/* 工人类 */
class Worker;

namespace Ui {
class ctrl;
}

class ctrl : public QWidget
{
    Q_OBJECT

public:
    explicit ctrl(QWidget *parent = nullptr);
    ~ctrl();

    QTcpSocket *tcpSocket;

private slots:
    void on_backbt_clicked();

    void on_ledbt_clicked();

    void on_musicbt_clicked();

    void on_videobt_clicked();

    void on_wendubt_clicked();

    void on_shidubt_clicked();

    void on_weatherbt_clicked();

    void Tlink_connected();

    /* 接收到消息 */
    void receiveMessages();

    /* 用于接收工人是否在工作的信号 */
    void handleResults(const QString &);

private:
    Ui::ctrl *ui;

    void Tlink_connect();

    /* 全局线程 */
    QThread workerThread;

    /* 工人类 */
    Worker *worker;

signals:
    /* 工人开始工作（做些耗时的操作 ） */
    void startWork();
};

/* Worker 类，这个类声明了 doWork1 函数，将整个 Worker 类移至线程 workerThread*/
class Worker:public QObject
{
    Q_OBJECT

private:
    /* 互斥锁 */
    QMutex lock;

    /* 标志位 */
    bool isCanRun;

public slots:
    /* 耗时的工作都放在槽函数下，工人可以有多份不同的工作，但是每次只能去做一份 */
    void doWork1();

    //void doWork2();

public:
    /* 打断线程（注意此方法不能放在槽函数下） */
    void stopWork();

signals:
    /* 工人工作函数状态的信号 */
    void resultReady(const QString &result);
};
#endif // CTRL_H
